<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class cotizaciones extends MY_Controller {
	/**
	 * Evita la validacion (enfocado cuando se usa ajax). Ver mas en privilegios_model
	 * @var unknown_type
	 */
	private $excepcion_privilegio = array('cotizaciones/imprimir/', 'cotizaciones/enviarEmail/');
	
	public function _remap($method){
		$this->carabiner->css(array(
				array('libs/jquery-ui.css', 'screen'),
				array('libs/ui.notify.css', 'screen'),
				array('libs/jquery.treeview.css', 'screen'),
				array('base.css', 'screen')
		));
		$this->carabiner->js(array(
				array('libs/jquery.min.js'),
				array('libs/jquery-ui.js'),
				array('libs/jquery.notify.min.js'),
				array('libs/jquery.treeview.js'),
				array('general/alertas.js')
		));
		
		$this->load->model("empleados_model");
		if($this->empleados_model->checkSession()){
			$this->empleados_model->excepcion_privilegio = $this->excepcion_privilegio;
			$this->info_empleado = $this->empleados_model->getInfoEmpleado($_SESSION['id_empleado'], true);
			if($this->empleados_model->tienePrivilegioDe('', get_class($this).'/'.$method.'/')){
				$this->{$method}();
			}else
				redirect(base_url('panel/home?msg=1'));
		}else
			redirect(base_url('panel/home'));
	}
	
	/**
	 * Default. Mustra el listado de cotizaciones para administrarlas
	 */
	public function index(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('libs/jquery.superbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.superbox.js'),
			array('cotizaciones/listado.js'),
			array('general/msgbox.js')
		));
		$this->load->library('pagination');
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Ventas'; //activa la opcion del menu
		$params['seo'] = array(
			'titulo' => 'Administrar cotizaciones'
		);
		
		$this->load->model('cotizaciones_model');
		$params['cotiza'] = $this->cotizaciones_model->getCotizaciones();
		
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/cotizaciones/listado', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * Agrega una cotizacion a la bd
	 */
	public function agregar(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.numeric.js'),
			array('general/msgbox.js'),
			array('general/util.js'),
			array('cotizaciones/frm_addmod.js')
		));
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Ventas'; //activa la opcion del menu
		$params['seo'] = array(
			'titulo' => 'Agregar Cotizacion'
		);
		$params['pagar_compra'] = false;
		
		$this->configAddModCotizacion();
		$this->load->model('cotizaciones_model');
		
		if($this->form_validation->run() == FALSE){
			$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()));
		}else{
			$respons = $this->cotizaciones_model->addCotizacion();
			
			if($respons[0]){
				redirect(base_url('panel/cotizaciones/agregar/?'.String::getVarsLink(array('msg')).'&msg=4'));
			}
		}
		
		$params['fecha'] = date("Y-m-d");
		$params['folio'] = $this->cotizaciones_model->getFolioCotiza();
		
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/cotizaciones/agregar', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * muesta la info de una cotizacion sin dejar editar la info
	 */
	public function ver(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.numeric.js'),
			array('general/msgbox.js'),
			array('general/util.js'),
			array('compras/frm_addmod.js'),
			array('cotizaciones/ver.js'),
		));
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Ventas'; //activa la opcion del menu
		$params['seo'] = array(
			'titulo' => 'Ver Cotizacion'
		);
		
		if(isset($_GET['id']{0})){
			/*$this->configAddModCotizacion();
			
			if($this->form_validation->run() == FALSE){
				$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()));
			}else{
				$respons = $this->empleados_model->updatePrivilegio();
				
				if($respons[0])
					redirect(base_url('panel/privilegios/modificar/?'.String::getVarsLink(array('msg')).'&msg=3'));
			}*/
			$this->load->model('cotizaciones_model');
			$params['inf'] = $this->cotizaciones_model->getInfoCotizacion($_GET['id']);
			if(!is_array($params['inf']))
				unset($params['inf']);
			
			if(isset($_GET['msg']{0}))
				$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		}else
			$params['frm_errors'] = $this->showMsgs(1);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/cotizaciones/ver', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * Elimina una cotizacion de la bd (le cambia el status a e:eliminada)
	 */
	public function eliminar(){
		if(isset($_GET['id']{0})){
			$this->load->model('cotizaciones_model');
			$respons = $this->cotizaciones_model->cancelaCotizacion();
			
			if($respons[0])
				redirect(base_url('panel/cotizaciones/?msg=5'));
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	
	/**
	 * Imprime la cotizacion
	 */
	public function imprimir(){
		if(isset($_GET['id']{0})){
			$this->load->model('cotizaciones_model');
			$this->cotizaciones_model->imprimirCotizacion($_GET['id']);
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	public function enviarEmail(){
		if(isset($_GET['id']{0})){
			$this->load->model('cotizaciones_model');

			$email = isset($_GET['email'])? $_GET['email']: '';
			$this->cotizaciones_model->enviarCotizacion($_GET['id'], $email);
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	
	
	
	/**
	 * Configura los metodos de agregar y modificar
	 */
	private function configAddModCotizacion(){
		$this->load->library('form_validation');
		$rules = array(
			array('field'	=> 'did_cliente',
					'label'		=> 'Cliente',
					'rules'		=> 'required|max_length[25]'),
			array('field'	=> 'did_vendedor',
					'label'		=> 'Vendedor',
					'rules'		=> 'required|max_length[25]'),
			array('field'	=> 'dfolio',
					'label'		=> 'Folio',
					'rules'		=> 'required|numeric|callback_seriefolio_check'),
			array('field'	=> 'dfecha',
					'label'		=> 'Fecha',
					'rules'		=> 'required|max_length[10]|callback_isValidDate'),
			array('field'	=> 'dtsubtotal',
					'label'		=> 'SubTotal',
					'rules'		=> 'required|numeric'),
			array('field'	=> 'dtiva',
					'label'		=> 'IVA',
					'rules'		=> 'required|numeric'),
			array('field'	=> 'dttotal',
					'label'		=> 'Total',
					'rules'		=> 'required|numeric|callback_val_total'),
				
			array('field'	=> 'dserie',
					'label'		=> 'Serie',
					'rules'		=> 'max_length[8]'),
			array('field'	=> 'dcliente',
					'label'		=> 'Cliente',
					'rules'		=> ''),
			array('field'	=> 'dvendedor',
					'label'		=> 'Vendedor',
					'rules'		=> ''),
			array('field'	=> 'dcliente_info',
					'label'		=> 'Cliente',
					'rules'		=> ''),
			array('field'	=> 'dttotal_letra',
					'label'		=> 'letra',
					'rules'		=> '')
		);
		$this->form_validation->set_rules($rules);
	}
	/**
	 * Form_validation: Valida si el usuario ya esta usado por alguien mas
	 * @param unknown_type $str
	 */
	public function seriefolio_check($str){
		if($str != ''){
			$sql = '';
			if(isset($_GET['id']))
				$sql = " AND id_cotizacion != '".$_GET['id']."'";
				
			$res = $this->db->select('Count(id_cotizacion) AS num')
				->from('cotizaciones')
				->where("folio = ".$str."".$sql)
			->get();
			$data = $res->row();
			if($data->num > 0){
				$this->form_validation->set_message('seriefolio_check', 'El folio ya esta utilizado por otra cotizacion.');
				return false;
			}
		}
		return true;
	}
	/**
	 * Form_validation: Valida su una fecha esta en formato correcto
	 */
	public function isValidDate($str){
		if($str != ''){
			if(String::isValidDate($str) == false){
				$this->form_validation->set_message('isValidDate', 'El campo %s no es una fecha valida');
				return false;
			}
		}
		return true;
	}
	
	public function val_total($str){
		if($str <= 0){
			$this->form_validation->set_message('val_total', 'El Total no puede ser 0, verifica los datos ingresados.');
			return false;
		}
		return true;
	}
	
	
	/**
	 * Muestra mensajes cuando se realiza alguna accion
	 * @param unknown_type $tipo
	 * @param unknown_type $msg
	 * @param unknown_type $title
	 */
	private function showMsgs($tipo, $msg='', $title='Compras!'){
		switch($tipo){
			case 1:
				$txt = 'El campo ID es requerido.';
				$icono = 'error';
			break;
			case 2: //Cuendo se valida con form_validation
				$txt = $msg;
				$icono = 'error';
			break;
			case 3:
				$txt = 'La cotizacion se modifico correctamente.';
				$icono = 'ok';
			break;
			case 4:
				$txt = 'La cotizacion se agrego correctamente.';
				$icono = 'ok';
			break;
			case 5:
				$txt = 'La cotizacion se cancelo correctamente.';
				$icono = 'ok';
			break;
			case 6:
				$txt = $msg;
				$icono = 'ok';
			break;
		}
		
		return array(
			'title' => $title,
			'msg' => $txt,
			'ico' => $icono);
	}
}

?>